﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Autofac;
using ComputerVision.Common;
using ComputerVision.Data;
using ComputerVision.Services;

namespace ComputerVision.VeXeForm
{
    public partial class frmSuCoVeXe : Form
    {
        private IService<Xe> _xe;
        private IService<VeXe> _veXe;
        private FileUtil fileUtil;
        private bool loaded = false;

        public frmSuCoVeXe()
        {
            InitializeComponent();
            _xe = Program.Container.Resolve<IService<Xe>>();
            _veXe = Program.Container.Resolve<IService<VeXe>>();
            fileUtil = new FileUtil();
        }

        private void btTimkiem_Click(object sender, EventArgs e)
        {
            var items =
                _xe.ToList()
                   .Where(
                       p =>
                       p.NgayVao != null && p.NgayVao.Value.Date >= dtVaoTu.Value.Date &&
                       p.NgayVao.Value.Date <= dtVaoDen.Value.Date);
            if (items.Any())
            {
                if (checkBiensoxe.Checked)
                {
                    if (string.IsNullOrEmpty(txtBienSoXe.Text.Trim()))
                    {
                        items = items.ToList().Where(p => p.BienSoXe == null);
                    }
                    else
                    {
                        items = items.ToList().Where(p => p.BienSoXe.Trim().Replace("-", "").Replace(".", "").Replace(" ", "").Contains(txtBienSoXe.Text.Trim().Replace("-", "").Replace(".", "").Replace(" ", "")));
                    }
                }

                if (checkSove.Checked && !string.IsNullOrEmpty(txtSove.Text.Trim()))
                {
                    items = items.ToList().Where(p => p.SoVe.Trim().Contains(txtSove.Text.Trim()));

                }

                if (checkThoiGianRa.Checked)
                {
                    items = items.ToList()
                                 .Where(
                                     p =>
                                     p.NgayRa != null && p.NgayRa.Value.Date >= dtRaTu.Value.Date &&
                                     p.NgayRa.Value.Date <= dtRaDen.Value.Date);

                }
            }

            lbKetQua.Text = items.Count().ToString();
            xeBindingSource.DataSource = items.OrderByDescending(p=>p.NgayVao);

        }

        private void checkBiensoxe_CheckedChanged(object sender, EventArgs e)
        {
            if (txtBienSoXe.Enabled == true)
            {
                txtBienSoXe.Enabled = false;
            }
            else
            {
                txtBienSoXe.Enabled = true;

            }
        }

        private void checkSove_CheckedChanged(object sender, EventArgs e)
        {
            if (txtSove.Enabled == true)
            {
                txtSove.Enabled = false;
            }
            else
            {
                txtSove.Enabled = true;

            }
        }

        private void checkThoiGianRa_CheckedChanged(object sender, EventArgs e)
        {
            if (dtRaDen.Enabled == true)
            {
                dtRaDen.Enabled = false;
                dtRaTu.Enabled = false;
            }
            else
            {
                dtRaDen.Enabled = true;
                dtRaTu.Enabled = true;

            }
        }

        private void dgvData_RowEnter(object sender, DataGridViewCellEventArgs e)
        {
            //picVaoTruoc.Image = ImageProcess.ConvertBytesToImg((byte[])dgvData.Rows[e.RowIndex].Cells[5].Value);
            //picVaoSau.Image = ImageProcess.ConvertBytesToImg((byte[])dgvData.Rows[e.RowIndex].Cells[6].Value);
            //picRaTruoc.Image = ImageProcess.ConvertBytesToImg((byte[])dgvData.Rows[e.RowIndex].Cells[7].Value);
            //picRaSau.Image = ImageProcess.ConvertBytesToImg((byte[])dgvData.Rows[e.RowIndex].Cells[8].Value);
            if (dgvData.RowCount == 0) return;

            try
            {
                if (dgvData.Rows[e.RowIndex].Cells[5].Value.ToString().Contains(@"\"))
                {
                    picVaoTruoc.Load(fileUtil.GenerateLink("ANHVAO", dgvData.Rows[e.RowIndex].Cells[5].Value.ToString()));
                }
                else
                {
                    picVaoTruoc.Load(fileUtil.GenerateOldLink("ANHVAO", dgvData.Rows[e.RowIndex].Cells[5].Value.ToString()));

                }

            }
            catch (Exception)
            {
                //MessageBox.Show(ex.Message);
            }

            try
            {
                if (dgvData.Rows[e.RowIndex].Cells[6].Value.ToString().Contains(@"\"))
                {
                    picVaoSau.Load(fileUtil.GenerateLink("ANHVAO", dgvData.Rows[e.RowIndex].Cells[6].Value.ToString()));
                }
                else
                {
                    picVaoSau.Load(fileUtil.GenerateOldLink("ANHVAO", dgvData.Rows[e.RowIndex].Cells[6].Value.ToString()));

                }

            }
            catch (Exception)
            {
                //MessageBox.Show(ex.Message);
            }

            try
            {
                if (dgvData.Rows[e.RowIndex].Cells[7].Value.ToString().Contains(@"\"))
                {
                    picRaTruoc.Load(fileUtil.GenerateLink("ANHRA", dgvData.Rows[e.RowIndex].Cells[7].Value.ToString()));
                }
                else
                {
                    picRaTruoc.Load(fileUtil.GenerateOldLink("ANHRA", dgvData.Rows[e.RowIndex].Cells[7].Value.ToString()));
                }

            }
            catch (Exception)
            {
                //MessageBox.Show(ex.Message);
            }

            try
            {
                if (dgvData.Rows[e.RowIndex].Cells[8].Value.ToString().Contains(@"\"))
                {
                    picRaSau.Load(fileUtil.GenerateLink("ANHRA", dgvData.Rows[e.RowIndex].Cells[8].Value.ToString()));
                }
                else
                {
                    picRaSau.Load(fileUtil.GenerateOldLink("ANHRA", dgvData.Rows[e.RowIndex].Cells[8].Value.ToString()));

                }

            }
            catch (Exception)
            {
                //MessageBox.Show(ex.Message);
            }

        }

        private void mnuBaoSuCoVe_Click(object sender, EventArgs e)
        {
            if (dgvData.SelectedRows.Count > 0)
            {
                if (MessageBox.Show("Bạn có chắc chắn muốn báo sự cố thẻ này. Sau khi báo vé này sẽ chuyển trạng thái về \"Không Hoạt Động \"", "Thông báo", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.OK)
                {
                    var selectedRow = dgvData.SelectedRows[0];
                    var soVe = selectedRow.Cells[1].Value.ToString().Trim();
                    var item = _veXe.Detail(soVe);
                    if (item != null)
                    {
                        item.LoaiVeId = item.LoaiVeId;
                        item.Status = Constants.StatusVeXe.InActive;
                        item.Modified = DateTime.Now;
                        item.ModifiedBy = Constants.CurrentUser;
                        _veXe.Update(item);
                        AlertList.Information(string.Format("Chuyển trạng thái thẻ {0} thành công.", soVe));
                    }
                    else
                    {
                        AlertList.Error("Số thẻ này không tồn tại trong bảng Vé xe");
                    }
                }

            }
            else
            {
                AlertList.Error("Lỗi trong quá trình sửa dữ liệu");
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < dgvData.Rows.Count; i++)
            {
                string name = ((DateTime)dgvData.Rows[i].Cells[3].Value).ToString("ddMMyyyy hhmmss");
                //picVaoTruoc.Image = ImageProcess.ConvertBytesToImg((byte[])dgvData.Rows[i].Cells[5].Value);
                //picVaoSau.Image = ImageProcess.ConvertBytesToImg((byte[])dgvData.Rows[i].Cells[6].Value);
                //picRaTruoc.Image = ImageProcess.ConvertBytesToImg((byte[])dgvData.Rows[i].Cells[7].Value);
                //picRaSau.Image = ImageProcess.ConvertBytesToImg((byte[])dgvData.Rows[i].Cells[8].Value);


                if ((byte[])dgvData.Rows[i].Cells[5].Value != null)
                {
                    File.WriteAllBytes(@"D:\\Data\\" + name + " VTruoc.jpg", (byte[])dgvData.Rows[i].Cells[5].Value);

                }
                if ((byte[])dgvData.Rows[i].Cells[6].Value != null)
                {
                    File.WriteAllBytes(@"D:\\Data\\" + name + " VSau.jpg", (byte[])dgvData.Rows[i].Cells[6].Value);
                }
                if ((byte[])dgvData.Rows[i].Cells[7].Value != null)
                {
                    File.WriteAllBytes(@"D:\\Data\\" + name + " RTruoc.jpg", (byte[])dgvData.Rows[i].Cells[7].Value);
                }

                if ((byte[])dgvData.Rows[i].Cells[8].Value != null)
                {
                    File.WriteAllBytes(@"D:\\Data\\" + name + " RTruoc.jpg", (byte[])dgvData.Rows[i].Cells[8].Value);
                }

            }


            //picVaoTruoc.Image.Save(@"D:\\Data\\" + ran.Next(1000000, 99999999) + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);

        }

        private void menuBaoMatVe_Click(object sender, EventArgs e)
        {
            if (dgvData.SelectedRows.Count > 0)
            {
                if (MessageBox.Show("Bạn có chắc chắn muốn báo mất thẻ này. Sau khi báo thẻ này sẽ chuyển trạng thái về \"Mất thẻ\"", "Thông báo", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.OK)
                {
                    var selectedRow = dgvData.SelectedRows[0];
                    var soVe = selectedRow.Cells[1].Value.ToString().Trim();
                    var item = _veXe.Detail(soVe);
                    if (item != null)
                    {
                        item.LoaiVeId = item.LoaiVeId;
                        item.Status = Constants.StatusVeXe.MatVe;
                        item.Modified = DateTime.Now;
                        item.ModifiedBy = Constants.CurrentUser;
                        _veXe.Update(item);
                        AlertList.Information(string.Format("Chuyển trạng thái thẻ {0} thành công.", soVe));
                    }
                    else
                    {
                        AlertList.Error("Số thẻ này không tồn tại trong bảng Vé xe");
                    }
                }

            }
            else
            {
                AlertList.Error("Lỗi trong quá trình sửa dữ liệu");
            }
        }

    }
}
